
/**
 给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。

说明：本题中，我们将空字符串定义为有效的回文串。

 

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
解释："amanaplanacanalpanama" 是回文串
示例 2:

输入: "race a car"
输出: false
解释："raceacar" 不是回文串

 */


function isPalindrome(s) {
  const s2 = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
  for (let i = 0; i < s2.length / 2; i++) {
    if (s2[i] !== s2[s2.length - i - 1]) return false;
  }
  return true;
};

console.log(isPalindrome("A man, a plan, a canal: Panama"));



function isPalindrome2(s) {
    const s2 = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    return s2 === s2.split('').reverse().join('');
}

console.log(isPalindrome2("A man, a plan, a canal: Panama"));


function isPalindrome3(s) {
    const s2 = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    let length = s2.length;
    let head = 0;
    let tail = length - 1;

    while (head <= tail) {
        if (s2[head] !== s2[tail]) return false;
        head++;
        tail--;
    }

    return true;
}

console.log(isPalindrome3("A man, a plan, a canal: Panama"));